본문으로 건너뛰기

프로세스의 메모리 영역에 대해서 설명해주세요.

프로세스가 생성되면 커널에는 PCB가 생성된다. 반면에 사용자 영역에는 크케 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

코드 영역

코드 영역은 텍스트 영역이라고도 부른다. 이 곳에는 말 그대로 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다. 코드 영역에는 데이터가 아닌 CPU가 실행할 명령어가 담겨 있기 때문에 쓰기가 금지된다. 즉, 코드 영역은 읽기 전용 공간이다.

데이터 영역

데이터 영역은 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장된다. 이런 데이터로는 전역 변수가 대표적이다. 코드 영역과 데이터 영역은 그 크기가 변하지 않는다. 코드 영역과 데이터 영역은 '크기가 고정된 영역'이라는 점에서 정적 할당 영역이라고도 부른다. 반면 힙 영역과 스택 영역은 프로세스가 실행 과정에서 그 크기가 변할 수 있는 영역이다. 두 영역을 동적 할당 영역이라고 부른다.

힙 영역

힙 영역은 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간이다. 프로그래밍 관점에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당공간을 반환해야 한다. 메모리 공간을 반환한다는 의미는 '더 이상 해당 메모리 공간을 사용하지 않겠다'라고 운영체제에 말해주는 것과 같다.

메모리 공간을 반환하지 않으면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래한다. 이런 문제를 메모리 누수라고한다.

스택 영역

스택 영역은 데이터를 일시적으로 저장한느 공간이다. 데이터 영역에 담기는 값과는 달리 잠깐 쓰다가 말 값들이 저장되는 공간이다. 이런 데이터로는 함수의 실행이 끝나면 사라지는 매개변수, 지역 변수가 대표적이다.

일시적으로 저장할 데이터는 스택 영역에 PUSH되고, 더 이상 필요하지 않은 데이터는 POP됨으로써 스택 영역에서 사라진다.

힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있기 때문에 동적 할당 영역이라고 부른다. 그래서 일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당된다.

Reference

  • 혼자 공부하는 운영체제